package chapter14.section2;

//程序14-6c：表格Panel

import javax.swing.*;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableRowSorter;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TransactionPanel extends JPanel implements ActionListener {
    private final TransactionTableModel db;

    public TransactionPanel() {
        super();
        this.setLayout(new BorderLayout());
        // 实际中可以从数据库或者文件中获得真正的数据
        this.db = new TransactionTableModel();
        JTable table = new JTable(this.db);
        TableRowSorter sorter = new TableRowSorter(db);
        table.setRowSorter(sorter);
        TableColumn col = table.getColumn("交易状态");// 获得列对象
        col.setPreferredWidth(50);// 设置该列的显示宽度
        // 下面定义了一个对状态列内容输出时的新的呈现，利用了匿名类定义的方法
        DefaultTableCellRenderer statusColumnRenderer = new DefaultTableCellRenderer() {
            public void setValue(Object value) {
                Boolean cv = (Boolean) value;
                setBackground(cv ? Color.WHITE : Color.red);
                setText(cv ? "Y" : "N");
            }
        };
        // 列对象关联到单元格的呈现对象
        col.setCellRenderer(statusColumnRenderer);
        JScrollPane scrollpane = new JScrollPane(table);
        this.add(scrollpane);
        JButton btnAdd = new JButton("add");
        this.add(btnAdd, BorderLayout.SOUTH);
        btnAdd.addActionListener(this);
    }

    //当点击按钮时，向表格模型中添加一条记录，同时表格会显示此行数据
    public void actionPerformed(ActionEvent e) {
        db.add(new Transaction("00x", "2022-04-10", "deposit", 100, 10200, true));
    }
}